#include <iostream>


// template<typename T>
// struct A
// {
//     T a;
// };

//继承的模板类如果声明模板类型，其子类不再是类模板，是普通类
// struct B : public A<int>
// {};

//继承的模板类不明确模板类型，其子类仍然是类模板
// template<typename T>
// struct B : public A<T>
// {};




template<typename T1,typename T2>
struct pair
{
    T1 first;
    T2 second;
};

//全特化 : 声明全部的模板类型
template<>
struct pair<int,std::string>
{
    int first;
    std::string second;

};

//偏特化 : 部分特化 
template<typename T>
struct pair<int,T>
{
    int first;
    T second;

};



// 全特化 > 偏特化 > 类模板
int main()
{
    // A<int> num;
    // num.a = 10;
    // B<int> numl;
    // numl.a = 5;
    // std::cout<<num.a<<std::endl;
    // std::cout<<numl.a<<std::endl;
    // return 0;




    pair<int,std::string> p = {1,"zhangsan"};
    std::cout<<p.first<<std::endl;
    std::cout<<p.second<<std::endl;

}